﻿using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using Maestro_Proveedores;

namespace Maestro_Proveedores.Forms
{
    public partial class Accidentes : Form
    {
        /// <summary>
        /// Identificador del formulario, esta variable utilizada para controlar el acceso al formulario y para realizar la auditoria
        /// </summary>
        public static string TIPO = "068";
        /// <summary>
        /// Este registro tiene los permisos que tiene usuario que inicio sesion sobre el presente formulario (lectura, escritura, etc..)
        /// </summary>
        private Auditoria.CORPORATIVADataSet.SEG_PERMISOSRow seg_PERMRow = null;
        /// <summary>
        /// Este formulario tiene la responsabilidad de gestionar la informacion correspondienete a los accidentes que se presentan al interior de la Corporación. 
        /// </summary>
        public Accidentes()
        {
            InitializeComponent();
            this.fecha_del_eventoDateTimePicker.MaxDate = DateTime.Now.Date.AddHours(23.9); ;
            this.pRV_accidenteTableAdapter = new _Maestro_Proveedores_CORPORATIVADataSetTableAdapters.PRV_accidenteTableAdapter();
        }

        private void accidentes_Load(object sender, EventArgs e)
        {
            this.prV_PROVEEDORTableAdapter.FillByNit(this.cORPORATIVADataSet.PRV_PROVEEDOR, "0");
            //--- auditoria
            if (ConfiguracionDelSistema.auditar)
            {
                Session.SEG_PERMISOSTableAdapter.FillByTipoGrupo(Session.AUDITORIADataSet.SEG_PERMISOS, TIPO + Session.Seg_USUARRow.CODGRU);
                this.seg_PERMRow = Session.AUDITORIADataSet.SEG_PERMISOS[0];
            }
        }

        private void buscar_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            if (this.textBox_nit_buscar.Text == "")
            {
                return;
            }
            try
            {
                //--- si tiene 4 o menos caracteres es muy problable que sea el ID
                if (this.textBox_nit_buscar.Text.Length <= 4)
                {
                    //-- si no lo encuentro por el ID, lo busco por el NIT
                    if (0 == this.prV_PROVEEDORTableAdapter.FillById(this.cORPORATIVADataSet.PRV_PROVEEDOR, this.textBox_nit_buscar.Text))
                    {
                        this.prV_PROVEEDORTableAdapter.FillByNit(this.cORPORATIVADataSet.PRV_PROVEEDOR, this.textBox_nit_buscar.Text);
                    }
                }
                //--- si tiene mas de 4 caracteres es muy provable que sea el NIT
                else
                {
                    //-- si no lo encuentro por el NIT, lo busco por el ID
                    if (0 == this.prV_PROVEEDORTableAdapter.FillByNit(this.cORPORATIVADataSet.PRV_PROVEEDOR, this.textBox_nit_buscar.Text))
                    {
                        this.prV_PROVEEDORTableAdapter.FillById(this.cORPORATIVADataSet.PRV_PROVEEDOR, this.textBox_nit_buscar.Text);
                    }
                }
            }
            catch (Exception) { }
            if (this.cORPORATIVADataSet.PRV_PROVEEDOR.Rows.Count > 0)
            {
                this.pRV_accidenteTableAdapter.FillByIdProveedor(this.cORPORATIVADataSet.PRV_accidente, this.idTextBox.Text);
                this.pRV_accidenteBindingSource.AddNew();
                this.fecha_del_eventoDateTimePicker.Value = DateTime.Now.Date;                
            }
            else
            {
                MessageBox.Show("Este proveedor aun no ha sido registrado en el sistema.");
            }

            Cursor.Current = Cursors.Default;
        }

        private void buscar_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                this.buscar_Click(null, null);
            }
        }

        #region Exepciones en la insercion de datos

        private void dataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            //MessageBox.Show("ERROR...\n" + e.Exception.ToString());
            //MessageBox.Show(sender.GetType().ToString());
            ((BindingSource)((DataGridView)sender).DataSource).CancelEdit();
        }

        #endregion

        #region Eventos asociados a los botones del BindingNavigator

        private void add_Click(object sender, EventArgs e)
        {
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                bs.AddNew();
                this.fecha_del_eventoDateTimePicker.Value = DateTime.Now.Date;
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
        }
                
        private void pRV_accidenteBindingSAVENavigator_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                //-- actualizo las fechas, para evitarq ue salga algun error (no ha definido el valor de la fecha)
                this.fecha_del_eventoDateTimePicker.Value = this.fecha_del_eventoDateTimePicker.Value.AddSeconds(1);

                Validate();
                bs.EndEdit();
                //---auditoria
                if (ConfiguracionDelSistema.auditar)
                {
                    string[] usuArios = new string[] { Session.Seg_USUARRow.USUARIO, TIPO, string.Empty, string.Empty };
                    Session.AUDITORIADataSet.CargarAuditoria(this.cORPORATIVADataSet.PRV_accidente, usuArios, this.seg_PERMRow);
                    Session.AUDITORIADataSet.GuardarAuditoria();
                }
                //---actualizar la lista
                this.pRV_accidenteTableAdapter.Update(this.cORPORATIVADataSet.PRV_accidente);
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
            Cursor.Current = Cursors.Default;
        }
        
        private void deshacer_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                foreach (DataTable dt in this.cORPORATIVADataSet.Tables)
                {
                    if (dt.TableName.Equals(bs.DataMember.ToString()))
                    {
                        dt.RejectChanges();
                        bs.CancelEdit();
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
                bs.CancelEdit();
            }
            Cursor.Current = Cursors.Default;
        }
        
        #endregion

        private void helpPictureBox_Click(object sender, EventArgs e)
        {
            Help.ShowHelp(this, ConfiguracionDelSistema.manualDeUsuario, HelpNavigator.TableOfContents);
        }

        private void EncontrarProveedorPictureBox_Click(object sender, EventArgs e)
        {
            //--- el formulario debe estar guardado en la clase redirect, por que es muy pesado y demora mucho al abrirlo.
            try
            {
                herramientas.Redirect.getFormulario("BuscarProveedor").ShowDialog();
                //-- una vez se cierre el asistente utilizo el ID que supuestamente se selecciono de este formulario y lo guardo en el campo de busqueda.
                this.textBox_nit_buscar.Text = ((Forms.BuscarProveedor)herramientas.Redirect.getFormulario("BuscarProveedor")).IdEncontrado;
                //-- si el valor no es vacio, tonces realizo la busqueda.
                if (!this.textBox_nit_buscar.Text.Equals(string.Empty))
                {
                    this.buscar_Click(null, null);
                }
            }
            catch (Exception ex)
            {
                herramientas.MessageException.show(ex);
            }
        }

        private void comoSeHaceLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            try
            {
                System.Diagnostics.Process.Start(ConfiguracionDelSistema.directorioVideoTutoriales + "accidentes.wmv");
            }
            catch (Exception ex)
            {
                herramientas.MessageException.show(ex);
            }
        }
    }
}
